//
//  comprehensive12.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/19.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef comprehensive12_hpp
#define comprehensive12_hpp

#include <stdio.h>
#include <iostream>

/*
 没有虚函数，基类指针和对派生类的引用只能访问基类成员变量和函数版本。
 
 虚函数是一种特殊类型的函数，可以解析基类和派生类之间存在的函数的最衍生版本（称为覆盖）。要被视为重写，派生类函数必须具有与虚拟基类函数相同的签名和返回类型。一种例外是协变返回类型，如果基类函数返回一个指向基类的指针或引用，它允许覆盖返回一个指向派生类的指针或引用。
 
 final可防止覆盖和继承
 
 如果你打算使用虚拟函数，你应该使你的析构函数变成虚拟的，所以如果删除一个指向基类的指针，就调用适当的析构函数。
 
 通过将虚拟函数分配给0，可以将虚拟函数设为纯虚拟/抽象。包含纯虚函数的类称为抽象类，不能实例化。 继承纯虚函数的类必须具体定义它们，否则它也将被视为抽象的。 纯粹的虚拟功能可以有一个机构，但它们仍然被认为是抽象的。

 接口类是没有成员变量和所有纯虚函数的类。 这些通常以大写字母I开头。
 
 虚拟基类是只包含一次的基类，无论它由对象继承多少次。
 
 当派生类被分配给基类对象时，基类只接收派生类的基本部分的副本。 这被称为对象切片。
 
 动态转换可用于将指向基类对象的指针转换为指向派生类对象的指针。 这就是所谓的向下转换。 转换失败将返回空指针。
 
 */



#endif /* comprehensive12_hpp */
